home *** CD-ROM | disk | FTP | other *** search
/ Clickx 75 / Clickx 75.iso / software / expressionweb / expressionwebv3 / ExpressionWeb_en.exe / Setup / WeConen.cab / xweb.ACTIONS.STRINGS.JS.en < prev    next >
Encoding:
Text File  |  2009-06-09  |  21.7 KB  |  668 lines

  1. ∩╗┐// SharedLib v1.0
  2.  
  3. /////////////////////////////////////////////////////////////////////
  4. //
  5. // escapeString
  6. //
  7. // Description:
  8. //    Escapes necessary characters in string paramter.
  9. //    E.g. "\" to "\\"
  10. //
  11. // Arguments:
  12. //    strToEscape : string        String to escape
  13. //
  14. // Return Value:  
  15. //    The escaped string.
  16. //
  17. /////////////////////////////////////////////////////////////////////
  18.  
  19. function escapeString( strToEscape )
  20. {
  21.     var astrUnEscaped    = new Array();
  22.     var astrEscaped        = new Array();
  23.     
  24.     // these are regexp syntax:
  25.     astrUnEscaped[0]    = "\\\\";
  26.     astrUnEscaped[1]    = "'";
  27.     astrUnEscaped[2]    = '"';
  28.     
  29.     // these are strings
  30.     astrEscaped[0]        = "\\\\";
  31.     astrEscaped[1]        = "\\'";
  32.     astrEscaped[2]        = '\\"';
  33.     
  34.     return ReplaceSubStrings( strToEscape, astrUnEscaped, astrEscaped );
  35. }
  36.  
  37. /////////////////////////////////////////////////////////////////////
  38. //
  39. // unescapeString
  40. //
  41. // Description:
  42. //    Converts any escaped characters in string parameter to original, unescaped character.
  43. //    E.g. "\\" to "\"
  44. //
  45. // Arguments:
  46. //    strToUnEscape : string        String to unescape
  47. //
  48. // Return Value:  
  49. //    The unescaped string.
  50. //
  51. /////////////////////////////////////////////////////////////////////
  52.  
  53. function unescapeString( strToUnEscape )
  54. {
  55.     var astrUnEscaped    = new Array();
  56.     var astrEscaped        = new Array();
  57.     
  58.     // these are regexp syntax:
  59.     astrEscaped[0]        = "\\\\\\\\";
  60.     astrEscaped[1]        = "\\\\'";
  61.     astrEscaped[2]        = '\\\\"';
  62.  
  63.     // these are strings
  64.     astrUnEscaped[0]    = "\\";
  65.     astrUnEscaped[1]    = "'";
  66.     astrUnEscaped[2]    = '"';
  67.         
  68.     return ReplaceSubStrings( strToUnEscape, astrEscaped, astrUnEscaped );
  69. }
  70.  
  71. function escapeRegExpExpString( strToEscape )
  72. {
  73.     var astrUnEscaped    = new Array();
  74.     var astrEscaped        = new Array();
  75.  
  76.     // these are regexp syntax:
  77.     astrUnEscaped[0]    = "\\\\";
  78.     astrUnEscaped[1]    = "\\(";
  79.     astrUnEscaped[2]    = '\\)';
  80.     astrUnEscaped[3]    = '\\.';
  81.     astrUnEscaped[4]    = '\\$';
  82.     astrUnEscaped[5]    = '\\{';
  83.     astrUnEscaped[6]    = '\\}';
  84.     astrUnEscaped[7]    = '\\[';
  85.     astrUnEscaped[8]    = '\\]';
  86.     astrUnEscaped[9]    = '\\*';
  87.     
  88.     // these are strings
  89.     astrEscaped[0]        = "\\\\";
  90.     astrEscaped[1]        = "\\(";
  91.     astrEscaped[2]        = "\\)";
  92.     astrEscaped[3]        = '\\.';
  93.     astrEscaped[4]        = '\\$';
  94.     astrEscaped[5]        = '\\{';
  95.     astrEscaped[6]        = '\\}';
  96.     astrEscaped[7]        = '\\[';
  97.     astrEscaped[8]        = '\\]';
  98.     astrEscaped[9]        = '\\*';
  99.     
  100.     return ReplaceSubStrings( strToEscape, astrUnEscaped, astrEscaped );
  101. }
  102.  
  103. function ReplaceSubStrings( strToReplace, astrFind, astrReplace )
  104. {
  105.     for( var nSubString = 0; nSubString < astrFind.length; nSubString++ )
  106.     {
  107.         var re = new RegExp( astrFind[nSubString], "g" );            
  108.  
  109.         strToReplace = strToReplace.replace( re, astrReplace[nSubString] );    
  110.     }
  111.     
  112.     return strToReplace;
  113. }
  114.  
  115. function stricmp( str1, str2 )
  116. {
  117.     str1 = String( str1 );
  118.     str2 = String( str2 );
  119.  
  120.     if( str1.toLowerCase() == str2.toLowerCase() ) return true;    
  121.     
  122.     return false;
  123. }
  124.  
  125. function isLowerCase( ch )
  126. {
  127.     var str = String( ch );
  128.     
  129.     if( str.toLowerCase() == ch ) return true;    
  130.     
  131.     return false;
  132. }
  133.  
  134. function isUpperCase( ch )
  135. {
  136.     var str = String( ch );
  137.     
  138.     if( str.toUpperCase() == ch ) return true;    
  139.     
  140.     return false;
  141. }
  142.  
  143. /////////////////////////////////////////////////////////////////////
  144. //
  145. // isSpace
  146. //
  147. // Description:
  148. //    Returns true if the given character is a particuliar representation
  149. //    of a space character.
  150. //
  151. // Arguments:
  152. //    ch : char                The character to test
  153. //
  154. // Return Value:  
  155. //    True if ch is a white-space character, false otherwise.
  156. //
  157. /////////////////////////////////////////////////////////////////////
  158.  
  159. function isSpace( ch )
  160. {
  161.     switch( ch )
  162.     {
  163.     case ' ':
  164.     case '\r':
  165.     case '\t':
  166.     case '\n':
  167.         return true;
  168.     }
  169.  
  170.     return false;
  171. }
  172.  
  173. /////////////////////////////////////////////////////////////////////
  174. //
  175. // trimStringLeft
  176. //
  177. // Description:
  178. //    Returns the passed in string with preceeding whitespace removed.
  179. //
  180. // Arguments:
  181. //    strToTrim : string             The string to be trimmed.
  182. //
  183. // Return Value:  
  184. //    The trimmed string.
  185. //
  186. /////////////////////////////////////////////////////////////////////
  187.  
  188. function trimStringLeft( strToTrim )
  189. {
  190.     var nPos;
  191.  
  192.     for( nPos = 0; nPos < strToTrim.length; nPos++ )
  193.     {
  194.         if( !isSpace( strToTrim.charAt( nPos ) ) ) break;        
  195.     }
  196.     
  197.     return strToTrim.substr( nPos, strToTrim.length - nPos );
  198. }
  199.  
  200. /////////////////////////////////////////////////////////////////////
  201. //
  202. // trimStringRight
  203. //
  204. // Description:
  205. //    Returns the passed in string with proceeding whitespace removed.
  206. //
  207. // Arguments:
  208. //    strToTrim : string             The string to be trimmed.
  209. //
  210. // Return Value:  
  211. //    The trimmed string.
  212. //
  213. /////////////////////////////////////////////////////////////////////
  214.  
  215. function trimStringRight( strToTrim )
  216. {
  217.     var nPos;
  218.     
  219.     for( nPos = strToTrim.length - 1; nPos >= 0 ; nPos-- )
  220.     {
  221.         if( !isSpace( strToTrim.charAt( nPos ) ) ) break;        
  222.     }
  223.     
  224.     return strToTrim.substr( 0, nPos + 1 );
  225. }
  226.  
  227. /////////////////////////////////////////////////////////////////////
  228. //
  229. // trimQuotes
  230. //
  231. // Description:
  232. //    Trims the preceeding and proceeding quotes around a given string.
  233. //    This should be used when processing strings in a script call returned
  234. //    from extractArgumentsFromScriptCall().
  235. //
  236. //    E.g. "'a string'" to "a string"
  237. //
  238. // Arguments:
  239. //    strToTrim : string             The string to be trimmed.
  240. //
  241. // Return Value:  
  242. //    The trimmed string.
  243. //
  244. /////////////////////////////////////////////////////////////////////
  245.  
  246. function trimQuotes( strToTrim )
  247. {    
  248.     if( 0 < strToTrim.length )
  249.     {
  250.         if( ( '\'' == strToTrim.charAt( 0 ) ) ||
  251.             ( '\"' == strToTrim.charAt( 0 ) ) )
  252.         {
  253.             strToTrim = strToTrim.substr( 1, strToTrim.length - 1 );
  254.         }
  255.         
  256.         if( ( '\'' == strToTrim.charAt( strToTrim.length - 1 ) ) ||
  257.             ( '\"' == strToTrim.charAt( strToTrim.length - 1 ) ) )
  258.         {
  259.             strToTrim = strToTrim.substr( 0, strToTrim.length - 1 );
  260.         }
  261.     }
  262.     
  263.     return strToTrim;
  264. }
  265.  
  266. /*
  267. function extractArguments( strScriptCall )
  268. {    
  269.     var        aRemoved = new Array();
  270.     
  271.     aRemoved['('] = new Array();
  272.     aRemoved[')'] = new Array();
  273.     aRemoved[','] = new Array();
  274.     
  275.     for( var nChar = 0; nChar < strScriptCall.length; nChar++ )
  276.     {
  277.         var    chQuote = null;
  278.     
  279.         if( '\'' == strScriptCall[nChar] || '\"' == strScriptCall[nChar] )
  280.         {
  281.             chQuote = strScriptCall[nChar];
  282.         }
  283.         
  284.         if( chQuote )
  285.         {
  286.             var bLastWasEscape = false;
  287.         
  288.             for( nChar++ ; nChar < strScriptCall.length; nChar++ )
  289.             {
  290.                 if( !bLastWasEscape )
  291.                 {
  292.                     if( chQuote == strScriptCall[nChar] )
  293.                     {
  294.                         break;
  295.                     }
  296.                 }
  297.             
  298.                 var bRemove = false;
  299.                 
  300.                 if( '\\' == strScriptCall[nChar] )
  301.                 {
  302.                     bLastWasEscape = true;
  303.                 }
  304.                 else
  305.                 {
  306.                     bLastWasEscape = false;
  307.                 }
  308.             
  309.                 if( '(' == strScriptCall[nChar] ) bRemove = true;
  310.                 else if( ')' == strScriptCall[nChar] ) bRemove = true;
  311.                 else if( ',' == strScriptCall[nChar] ) bRemove = true;
  312.                                 
  313.                 if( bRemove )
  314.                 {
  315.                     aRemoved[strScriptCall[nChar]][aRemoved.length] = nChar;
  316.                     
  317.                     strScriptCall[nChar] = '_';
  318.                 }
  319.             }
  320.         }
  321.     }
  322.  
  323.     var    aArguments = strArgumentList.split( "()," );
  324. }
  325. */
  326. /////////////////////////////////////////////////////////////////////
  327. //
  328. // extractArgumentsFromScriptCall
  329. //
  330. // Description:
  331. //    Returns an array of objects containing information about 
  332. //    the arguments of the original script call.
  333. //
  334. // Arguments:
  335. //    strScriptCall : string         The string returned by the extensions 
  336. //                                    "getScriptCall" API function.
  337. //
  338. // Return Value:  
  339. //    Array of "Return" objects, containing properties "strArgument" and
  340. //    and "bIsURL".
  341. //
  342. /////////////////////////////////////////////////////////////////////
  343.  
  344. function extractArgumentsFromScriptCall( strScriptCall )
  345. {    
  346.     function Return( strArgument, bIsURL )
  347.     {
  348.         this.strArgument    = strArgument;
  349.         this.bIsURL            = bIsURL;
  350.     }
  351.  
  352.     var    aReturn                = new Array();
  353.     var    nArgumentStartPos    = strScriptCall.indexOf( "(" ) + 1;
  354.     var    nArgumentEndPos        = strScriptCall.lastIndexOf( ")" ) - 1;
  355.  
  356.     if( ( 0 <= nArgumentStartPos ) &&
  357.         ( nArgumentStartPos <= nArgumentEndPos ) )
  358.     {
  359.         var    strArgumentList     = strScriptCall.substr( nArgumentStartPos, nArgumentEndPos - nArgumentStartPos + 1 );        
  360.         var oArgs                = new VBArray( FrontPage.SplitArgs( strArgumentList, "," ) );
  361.         var    aArguments            = oArgs.toArray();
  362.  
  363.         for( var nArg = 0; nArg < aArguments.length; nArg++ )
  364.         {
  365.             var    strArgument    = aArguments[nArg];
  366.             var    nLength     = strArgument.length;
  367.             var    bIsURL        = false;
  368.  
  369.             for( var nPos = 0; nPos < nLength; nPos++ )
  370.             {
  371.                 if( ( nPos + 1 < nLength ) &&
  372.                     ( '/' == strArgument.charAt( nPos ) ) &&
  373.                     ( '*' == strArgument.charAt( nPos+1 ) ) )
  374.                 {
  375.                     var    nCommentStart     = nPos + 2;
  376.                     var    nCommentEnd        = 0;
  377.         
  378.                     for( nPos += 2; nPos < nLength; nPos++ )
  379.                     {
  380.                         if( ( nPos + 1 < nLength ) &&
  381.                             ( '*' == strArgument.charAt( nPos ) ) &&
  382.                             ( '/' == strArgument.charAt( nPos+1 ) ) )
  383.                         {
  384.                             nCommentEnd = nPos - 1;
  385.         
  386.                             nPos += 2;
  387.  
  388.                             break;
  389.                         }
  390.                     }
  391.  
  392.                     if( nCommentStart <= nCommentEnd )
  393.                     {
  394.                         var strComment = strArgument.substr( nCommentStart, nCommentEnd - nCommentStart + 1 );
  395.  
  396.                         strComment.toLowerCase();
  397.  
  398.                         if( "url" == strComment )
  399.                         {
  400.                             bIsURL = true;
  401.                         }
  402.  
  403.                         strArgument = strArgument.substr( nCommentEnd + 3, nLength - nCommentEnd - 2 );                                            
  404.                     }
  405.  
  406.                     break;
  407.                 }
  408.             }
  409.             
  410.             strArgument = trimStringLeft( trimStringRight( strArgument ) );
  411.             
  412.             aReturn[nArg] = new Return( strArgument, bIsURL );
  413.         }    
  414.     }
  415.  
  416.     return aReturn;
  417. }
  418.  
  419. // HTML encode
  420.  
  421. function htmlEncode(sText) {
  422. sText = ('' + sText).replace(/&/g,'&');
  423. sText = sText.replace(/</g,'<');
  424. sText = sText.replace(/>/g,'>');
  425. return sText.replace(/"/g,'"');
  426. }
  427.  
  428. // HTML decode
  429.  
  430. function htmlDecode(sText) {
  431. sText = ('' + sText).replace(/&/g,'&');
  432. sText = sText.replace(/</g,'<');
  433. sText = sText.replace(/>/g,'>');
  434. return sText.replace(/"/g,'"');
  435. }
  436.  
  437. // Use this function for localized strings.
  438. //
  439. // Usage:
  440. //    strBuildParam( "%1 and then %2", "1st", "2nd" );
  441. // Would return:
  442. //    "1st and then 2nd"
  443. //
  444.  
  445. function strBuildParam(stPattern)
  446. {
  447.     var re;
  448.  
  449.     var i;
  450.     for (i = 1; i < strBuildParam.arguments.length; i++)
  451.         {
  452.         re = new RegExp("\\%" + i);
  453.         stPattern = stPattern.replace(re, strBuildParam.arguments[i]);
  454.         }
  455.     return stPattern;
  456. }
  457.  
  458. // SIG // Begin signature block
  459. // SIG // MIIasgYJKoZIhvcNAQcCoIIaozCCGp8CAQExCzAJBgUr
  460. // SIG // DgMCGgUAMGcGCisGAQQBgjcCAQSgWTBXMDIGCisGAQQB
  461. // SIG // gjcCAR4wJAIBAQQQEODJBs441BGiowAQS9NQkAIBAAIB
  462. // SIG // AAIBAAIBAAIBADAhMAkGBSsOAwIaBQAEFBcNWRk+BW0A
  463. // SIG // UVgInwKKNapJv4azoIIVkzCCA8QwggMtoAMCAQICEEe/
  464. // SIG // GZXfjVJGQ/fbbUgNMaQwDQYJKoZIhvcNAQEFBQAwgYsx
  465. // SIG // CzAJBgNVBAYTAlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENh
  466. // SIG // cGUxFDASBgNVBAcTC0R1cmJhbnZpbGxlMQ8wDQYDVQQK
  467. // SIG // EwZUaGF3dGUxHTAbBgNVBAsTFFRoYXd0ZSBDZXJ0aWZp
  468. // SIG // Y2F0aW9uMR8wHQYDVQQDExZUaGF3dGUgVGltZXN0YW1w
  469. // SIG // aW5nIENBMB4XDTAzMTIwNDAwMDAwMFoXDTEzMTIwMzIz
  470. // SIG // NTk1OVowUzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZl
  471. // SIG // cmlTaWduLCBJbmMuMSswKQYDVQQDEyJWZXJpU2lnbiBU
  472. // SIG // aW1lIFN0YW1waW5nIFNlcnZpY2VzIENBMIIBIjANBgkq
  473. // SIG // hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqcqypMzNIK8K
  474. // SIG // fYmsh3XwtE7x38EPv2dhvaNkHNq7+cozq4QwiVh+jNtr
  475. // SIG // 3TaeD7/R7Hjyd6Z+bzy/k68Numj0bJTKvVItq0g99bbV
  476. // SIG // XV8bAp/6L2sepPejmqYayALhf0xS4w5g7EAcfrkN3j/H
  477. // SIG // tN+HvV96ajEuA5mBE6hHIM4xcw1XLc14NDOVEpkSud5o
  478. // SIG // L6rm48KKjCrDiyGHZr2DWFdvdb88qiaHXcoQFTyfhOpU
  479. // SIG // wQpuxP7FSt25BxGXInzbPifRHnjsnzHJ8eYiGdvEs0dD
  480. // SIG // mhpfoB6Q5F717nzxfatiAY/1TQve0CJWqJXNroh2ru66
  481. // SIG // DfPkTdmg+2igrhQ7s4fBuwIDAQABo4HbMIHYMDQGCCsG
  482. // SIG // AQUFBwEBBCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29j
  483. // SIG // c3AudmVyaXNpZ24uY29tMBIGA1UdEwEB/wQIMAYBAf8C
  484. // SIG // AQAwQQYDVR0fBDowODA2oDSgMoYwaHR0cDovL2NybC52
  485. // SIG // ZXJpc2lnbi5jb20vVGhhd3RlVGltZXN0YW1waW5nQ0Eu
  486. // SIG // Y3JsMBMGA1UdJQQMMAoGCCsGAQUFBwMIMA4GA1UdDwEB
  487. // SIG // /wQEAwIBBjAkBgNVHREEHTAbpBkwFzEVMBMGA1UEAxMM
  488. // SIG // VFNBMjA0OC0xLTUzMA0GCSqGSIb3DQEBBQUAA4GBAEpr
  489. // SIG // +epYwkQcMYl5mSuWv4KsAdYcTM2wilhu3wgpo17IypMT
  490. // SIG // 5wRSDe9HJy8AOLDkyZNOmtQiYhX3PzchT3AxgPGLOIez
  491. // SIG // 6OiXAP7PVZZOJNKpJ056rrdhQfMqzufJ2V7duyuFPrWd
  492. // SIG // tdnhV/++tMV+9c8MnvCX/ivTO1IbGzgn9z9KMIID/zCC
  493. // SIG // AuegAwIBAgIQDekr8NTYKYgYMgUJXpp2iDANBgkqhkiG
  494. // SIG // 9w0BAQUFADBTMQswCQYDVQQGEwJVUzEXMBUGA1UEChMO
  495. // SIG // VmVyaVNpZ24sIEluYy4xKzApBgNVBAMTIlZlcmlTaWdu
  496. // SIG // IFRpbWUgU3RhbXBpbmcgU2VydmljZXMgQ0EwHhcNMDMx
  497. // SIG // MjA0MDAwMDAwWhcNMDgxMjAzMjM1OTU5WjBXMQswCQYD
  498. // SIG // VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4x
  499. // SIG // LzAtBgNVBAMTJlZlcmlTaWduIFRpbWUgU3RhbXBpbmcg
  500. // SIG // U2VydmljZXMgU2lnbmVyMIIBIjANBgkqhkiG9w0BAQEF
  501. // SIG // AAOCAQ8AMIIBCgKCAQEAslAoSN3TaHqEGERmdV1+xLif
  502. // SIG // Yyb/PUOcfBE4ECVVc9l1J2n9TrkgXNMK+aAbKu1VViFh
  503. // SIG // 2B7b5Lwza8fv3aM3ZY4bkwy2Ux5cfGY1XwWKRf52Tt9T
  504. // SIG // gKKBIJ2uiFyiCPflMPnuIjdMQgrO38YfxNZV6YE/tVKj
  505. // SIG // LKoBevKiqo01/p/mXWoFnz1r47+WwP7MYPlA5wegROuB
  506. // SIG // UW6lKvK2ihAo7Y/cBqCGUJp7SggNMB3KEJ5r9+lYrgSp
  507. // SIG // QJmyKOiPFqw841NvS9M1nbVvZB2zliy7Ped56216+Rbm
  508. // SIG // Jq2v75lTt0Aslbh5qv7UUqspdH5C7DkeomoW5lm7JGjY
  509. // SIG // AIBDEIeAawIDAQABo4HKMIHHMDQGCCsGAQUFBwEBBCgw
  510. // SIG // JjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AudmVyaXNp
  511. // SIG // Z24uY29tMAwGA1UdEwEB/wQCMAAwMwYDVR0fBCwwKjAo
  512. // SIG // oCagJIYiaHR0cDovL2NybC52ZXJpc2lnbi5jb20vdHNz
  513. // SIG // LWNhLmNybDAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDAO
  514. // SIG // BgNVHQ8BAf8EBAMCBsAwJAYDVR0RBB0wG6QZMBcxFTAT
  515. // SIG // BgNVBAMTDFRTQTIwNDgtMS01NDANBgkqhkiG9w0BAQUF
  516. // SIG // AAOCAQEAh3hw2k5SASBb4HnJgjDE/bkZlr2RAMO9zc3G
  517. // SIG // 9A7Y//lNwDNiMBHF9XQb1JLeX5wgE7F8Rb5QzYPngBeD
  518. // SIG // pyeTZxNG+8q4mEEDzJtRWwWLf6hv8xtQGyQu8mmNbCL3
  519. // SIG // u8oWle0MdMBod9nrmWKHwXOQ+Il0eiOro5h7l7H3jylx
  520. // SIG // TS51G0hB2vC1DSBU1negl4Jjaf0Jz4rwdbsJm9n5EVUm
  521. // SIG // mmEyvnoCsHuGvqLDiyIseNE1drySc1z5ueZMFQojzOTS
  522. // SIG // 1DQuSUAVPA9geiTGpWbvls9w6z7n9A1+3NF8o3ZxacGc
  523. // SIG // T0cwNSGxoq8aYjwr2Y6qKgd72BizXHvinaVv/jyJrTCC
  524. // SIG // BBIwggL6oAMCAQICDwDBAIs8PIgR0T72Y+zfQDANBgkq
  525. // SIG // hkiG9w0BAQQFADBwMSswKQYDVQQLEyJDb3B5cmlnaHQg
  526. // SIG // KGMpIDE5OTcgTWljcm9zb2Z0IENvcnAuMR4wHAYDVQQL
  527. // SIG // ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xITAfBgNVBAMT
  528. // SIG // GE1pY3Jvc29mdCBSb290IEF1dGhvcml0eTAeFw05NzAx
  529. // SIG // MTAwNzAwMDBaFw0yMDEyMzEwNzAwMDBaMHAxKzApBgNV
  530. // SIG // BAsTIkNvcHlyaWdodCAoYykgMTk5NyBNaWNyb3NvZnQg
  531. // SIG // Q29ycC4xHjAcBgNVBAsTFU1pY3Jvc29mdCBDb3Jwb3Jh
  532. // SIG // dGlvbjEhMB8GA1UEAxMYTWljcm9zb2Z0IFJvb3QgQXV0
  533. // SIG // aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
  534. // SIG // CgKCAQEAqQK9wXDmO/JOGyifl3heMOqiqY0lX/j+lUyj
  535. // SIG // t/6doiA+fFGim6KPYDJr0UJkee6sdslU2vLrnIYcj5+E
  536. // SIG // ZrPFa3piI9YdPN4PAZLolsS/LWaammgmmdA6LL8MtVgm
  537. // SIG // wUbnCj44liypKDmo7EmDQuOED7uabFVhrIJ8oWAtd0zp
  538. // SIG // mbRkO5pQHDEIJBSfqeeRKxjmPZhjFGBYBWWfHTdSh/en
  539. // SIG // 75QCxhvTv1VFs4mAvzrsVJROrv2nem10Tq8YzJYJKCEA
  540. // SIG // V5BgaTe7SxIHPFb/W/ukZgoIptKBVlfvtjteFoF3BNr2
  541. // SIG // vq6Alf6wzX/WpxpyXDzKvPAIoyIwswaFybMgdxOF3wID
  542. // SIG // AQABo4GoMIGlMIGiBgNVHQEEgZowgZeAEFvQcO9pcp4j
  543. // SIG // UX4Usk2O/8uhcjBwMSswKQYDVQQLEyJDb3B5cmlnaHQg
  544. // SIG // KGMpIDE5OTcgTWljcm9zb2Z0IENvcnAuMR4wHAYDVQQL
  545. // SIG // ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xITAfBgNVBAMT
  546. // SIG // GE1pY3Jvc29mdCBSb290IEF1dGhvcml0eYIPAMEAizw8
  547. // SIG // iBHRPvZj7N9AMA0GCSqGSIb3DQEBBAUAA4IBAQCV6AvA
  548. // SIG // jfOXGDXtuAEk2HcR81xgMp+eC8s+BZGIj8k65iHy8FeT
  549. // SIG // LLWgR8hi7/zXzDs7Wqk2VGn+JG0/ycyq3gV83TGNPZ8Q
  550. // SIG // cGq7/hJPGGnA/NBD4xFaIE/qYnuvqhnIKzclLb5loRKK
  551. // SIG // JQ9jo/dUHPkhydYV81KsbkMyB/2CF/jlZ2wNUfa98VLH
  552. // SIG // vefEMPwgMQmIHZUpGk3VHQKl8YDgA7Rb9LHdyFfuZUnH
  553. // SIG // UlS2tAMoEv+Q1vAIj364l8WrNyzkeuSod+N2oADQaj/B
  554. // SIG // 0jaK4EESqDVqG2rbNeHUHATkqEUEyFozOG5NHA1itwqi
  555. // SIG // jNPVVD9GzRxVpnDbEjqHk3Wfp9KgMIIEyTCCA7GgAwIB
  556. // SIG // AgIQaguZT8AA3qoR1NhAmqi+5jANBgkqhkiG9w0BAQQF
  557. // SIG // ADBwMSswKQYDVQQLEyJDb3B5cmlnaHQgKGMpIDE5OTcg
  558. // SIG // TWljcm9zb2Z0IENvcnAuMR4wHAYDVQQLExVNaWNyb3Nv
  559. // SIG // ZnQgQ29ycG9yYXRpb24xITAfBgNVBAMTGE1pY3Jvc29m
  560. // SIG // dCBSb290IEF1dGhvcml0eTAeFw0wMDEyMTAwODAwMDBa
  561. // SIG // Fw0wNTExMTIwODAwMDBaMIGmMQswCQYDVQQGEwJVUzET
  562. // SIG // MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk
  563. // SIG // bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0
  564. // SIG // aW9uMSswKQYDVQQLEyJDb3B5cmlnaHQgKGMpIDIwMDAg
  565. // SIG // TWljcm9zb2Z0IENvcnAuMSMwIQYDVQQDExpNaWNyb3Nv
  566. // SIG // ZnQgQ29kZSBTaWduaW5nIFBDQTCCASAwDQYJKoZIhvcN
  567. // SIG // AQEBBQADggENADCCAQgCggEBAKKEFVPYCzAONJX/OhvC
  568. // SIG // 8y97bTcjTfPSjOX9r/3FAjQfJMflodxU7H4CdEer2zJY
  569. // SIG // FhRRKTjxfrK0jDpHtTlOblTCMQw6bfvNzctQnBuup9jZ
  570. // SIG // SiY/tcXLj5biSfJt2OmWPt4Fz/CmVTetL2DNgGFCoUlU
  571. // SIG // Sg8Yt0vZk5kwWkd1ZLTTu922qwydT7hzOxg6qrSHjLCI
  572. // SIG // sE1PH04RtTOA3w06ZG9ExzS9SpObvKYd+QUjTmApj8wq
  573. // SIG // 8oSama2o2wpwe9Y0QZClt2bHXBsdozMOm1QDGj+YkLjM
  574. // SIG // 5z0EdEMcj/c55rOsSHprKg5iAWE5dm79PpgHSxTxAUb9
  575. // SIG // FQDgR9pP5AXkgCUCAQOjggEoMIIBJDATBgNVHSUEDDAK
  576. // SIG // BggrBgEFBQcDAzCBogYDVR0BBIGaMIGXgBBb0HDvaXKe
  577. // SIG // I1F+FLJNjv/LoXIwcDErMCkGA1UECxMiQ29weXJpZ2h0
  578. // SIG // IChjKSAxOTk3IE1pY3Jvc29mdCBDb3JwLjEeMBwGA1UE
  579. // SIG // CxMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSEwHwYDVQQD
  580. // SIG // ExhNaWNyb3NvZnQgUm9vdCBBdXRob3JpdHmCDwDBAIs8
  581. // SIG // PIgR0T72Y+zfQDAQBgkrBgEEAYI3FQEEAwIBADAdBgNV
  582. // SIG // HQ4EFgQUKVy5G7bNM+67nll99+XKLsQNNCgwGQYJKwYB
  583. // SIG // BAGCNxQCBAweCgBTAHUAYgBDAEEwCwYDVR0PBAQDAgFG
  584. // SIG // MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQAD
  585. // SIG // ggEBAEVY4ppBf/ydv0h3d66M2eYZxVe0Gr20uV8CoUVq
  586. // SIG // OVn5uSecLU2e/KLkOIo4ZCJC37kvKs+31gbK6yq/4BqF
  587. // SIG // fNtRCD30ItPUwG2IgRVEX2SDZMSplCyK25A3Sg+36NRh
  588. // SIG // j3Z24dkl/ySElY0EVlSUoRw6PoK87qWHjByMS3lftUn6
  589. // SIG // XjJpOh9UrXVN32TnMDzbZElE+/vEHEJx5qA9Re5rAJ+s
  590. // SIG // Qr26EbNW5PvVoiqB2B9OolW+J49wpqJsG/9UioK8gUum
  591. // SIG // obFmeqkXp8sGwEfrprPpMRVTPSoEv/9zSNyLJ0P8Y+ju
  592. // SIG // JIdbvjbR6DH1Mtle33l6ujCsaYZK+4wRvxuNVFkwggTh
  593. // SIG // MIIDyaADAgECAgphDn2nAAAAAABIMA0GCSqGSIb3DQEB
  594. // SIG // BQUAMIGmMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2Fz
  595. // SIG // aGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UE
  596. // SIG // ChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSswKQYDVQQL
  597. // SIG // EyJDb3B5cmlnaHQgKGMpIDIwMDAgTWljcm9zb2Z0IENv
  598. // SIG // cnAuMSMwIQYDVQQDExpNaWNyb3NvZnQgQ29kZSBTaWdu
  599. // SIG // aW5nIFBDQTAeFw0wMzEwMjUwNTU5MTRaFw0wNTAxMjUw
  600. // SIG // NjA5MTRaMHQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpX
  601. // SIG // YXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYD
  602. // SIG // VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xHjAcBgNV
  603. // SIG // BAMTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjCCASIwDQYJ
  604. // SIG // KoZIhvcNAQEBBQADggEPADCCAQoCggEBALIthwm1XN9V
  605. // SIG // metSYufT9ONFcakyv5TyDukNrf6dxwRqWE6cpNHYREH7
  606. // SIG // ZH4PZe7IF9pN29nWULQMVltsFohLvwPuUEiD7E+Ik5pR
  607. // SIG // 45QZf/qzl6XOYG2f3UyTOL3NNFlx5obO6YOZoJa46uBE
  608. // SIG // WxNCuTpITlRy9wiW5ADEggF2Q69hwtv65cXwAhPd+DW0
  609. // SIG // Dw1SNkZ0Q7GiypzdfpnxNRF3+xUmAY7P4LgEeCoV/XLG
  610. // SIG // YHaRDOdPshgYG2mJtPEvIRtm6sqRx0YNuRdYcVhWhmUj
  611. // SIG // 0QIyrmSgb9pSlf373Y009cEMNaNH1+kbavoPRbToMh1w
  612. // SIG // Gb3R+eVkH+uHN+pv1A2Dj/0CAwEAAaOCAUAwggE8MA4G
  613. // SIG // A1UdDwEB/wQEAwIGwDAdBgNVHQ4EFgQUgo+nF2RkckTV
  614. // SIG // MK4WhOJTkMs+ntQwEwYDVR0lBAwwCgYIKwYBBQUHAwMw
  615. // SIG // gakGA1UdIwSBoTCBnoAUKVy5G7bNM+67nll99+XKLsQN
  616. // SIG // NCihdKRyMHAxKzApBgNVBAsTIkNvcHlyaWdodCAoYykg
  617. // SIG // MTk5NyBNaWNyb3NvZnQgQ29ycC4xHjAcBgNVBAsTFU1p
  618. // SIG // Y3Jvc29mdCBDb3Jwb3JhdGlvbjEhMB8GA1UEAxMYTWlj
  619. // SIG // cm9zb2Z0IFJvb3QgQXV0aG9yaXR5ghBqC5lPwADeqhHU
  620. // SIG // 2ECaqL7mMEoGA1UdHwRDMEEwP6A9oDuGOWh0dHA6Ly9j
  621. // SIG // cmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3Rz
  622. // SIG // L0NvZGVTaWduUENBLmNybDANBgkqhkiG9w0BAQUFAAOC
  623. // SIG // AQEASkjcMrB6Zz+LKwG0DPXbeUFd4Dftv1Fzf9b5fmxt
  624. // SIG // f5+8paRIHqjj7ab1PIZqkVlM1FMU697uzcPckKMIsYtF
  625. // SIG // Ov1qcPDOBAY2LjC0j0yr6t1DWc2DoNfupEmuECRPmf/V
  626. // SIG // Avnshkyl2CLoARct6xOQmZoRgDMMGYh+BhnUMe1MyX67
  627. // SIG // JMexveVUO+p3EImHbOCcgI3SEORKl6nqVxnXeCsNmzUn
  628. // SIG // sTi+0r+tx/DmbVqfEPbK8fLgMKsBphPItjlkvQkJ7Yu2
  629. // SIG // FBhqeinGdEs7R/EUycveF92yXNjMOYc8OUjFMHyOdVfu
  630. // SIG // 7RugDYVyNWRJvqFJOOKanEp8gmQNAXhfVv6IdDGCBIsw
  631. // SIG // ggSHAgEBMIG1MIGmMQswCQYDVQQGEwJVUzETMBEGA1UE
  632. // SIG // CBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEe
  633. // SIG // MBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSsw
  634. // SIG // KQYDVQQLEyJDb3B5cmlnaHQgKGMpIDIwMDAgTWljcm9z
  635. // SIG // b2Z0IENvcnAuMSMwIQYDVQQDExpNaWNyb3NvZnQgQ29k
  636. // SIG // ZSBTaWduaW5nIFBDQQIKYQ59pwAAAAAASDAJBgUrDgMC
  637. // SIG // GgUAoIGoMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEE
  638. // SIG // MBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMCMG
  639. // SIG // CSqGSIb3DQEJBDEWBBTTVaXTViSdvLV70VPu2Dk65Dhc
  640. // SIG // TzBIBgorBgEEAYI3AgEMMTowOKAWgBQAcwB0AHIAaQBu
  641. // SIG // AGcAcwAuAGoAc6EegBxodHRwOi8vb2ZmaWNlLm1pY3Jv
  642. // SIG // c29mdC5jb20gMA0GCSqGSIb3DQEBAQUABIIBAIZ+o/ZY
  643. // SIG // KnNWbKx9FQcP5+Rd5ey0WrcRwBdyhlSMKqFHZaDOb2Dk
  644. // SIG // lczwfC0Jrny/d7DCAxKH0T/6c7xCm18Lm90dv0E9LC3m
  645. // SIG // k7iT5DKee4Jt1xN8Zk64uBZRoIllVZfzHJSc6cLuajSa
  646. // SIG // iNDDKI36LbtQ9b7lMqupdz01BH2cJ9ufYLHK2tUeRGBD
  647. // SIG // tGvZaZK8fuiyR8MQ7icJ4L7I78dGBTW73Exsoq5LYZeJ
  648. // SIG // YAQ6UYytID/+mNheyG6OMAd0u4pCkIqJlIN2Pemh0zxe
  649. // SIG // GUQw0Mw6TaDaj7lxjCnIOqXAvuZXp2+ZNdKrGhQaEDb+
  650. // SIG // MTtgTmangtCbFpRSILZ2B6gagV+hggH/MIIB+wYJKoZI
  651. // SIG // hvcNAQkGMYIB7DCCAegCAQEwZzBTMQswCQYDVQQGEwJV
  652. // SIG // UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xKzApBgNV
  653. // SIG // BAMTIlZlcmlTaWduIFRpbWUgU3RhbXBpbmcgU2Vydmlj
  654. // SIG // ZXMgQ0ECEA3pK/DU2CmIGDIFCV6adogwDAYIKoZIhvcN
  655. // SIG // AgUFAKBZMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEw
  656. // SIG // HAYJKoZIhvcNAQkFMQ8XDTA0MDQxNjA5MzcxOFowHwYJ
  657. // SIG // KoZIhvcNAQkEMRIEEMwxW/r/Q6uHMEmozMaEUQIwDQYJ
  658. // SIG // KoZIhvcNAQEBBQAEggEATj1kPXLorlnW3+uSbKkBwCez
  659. // SIG // 83d3fEkzE50ogMbU85LLdhRNcxMuslYjCURtQl60X3mc
  660. // SIG // w358RKS+y82iE4NvN7MT+GU1U58NFzRgfacjVU9icMa0
  661. // SIG // N/ZKU3zBcjHd23wfVSafnwTD0cKQmNgNE3z0Q59k0aoH
  662. // SIG // rkaRvUeXL9yiDT2pjqyvaLRv3F3Gj97TLCBIM4RCqLUI
  663. // SIG // vRxFM1G2Mk3E8mLBa+Vps8XfL5Vkuv7tgAnD7HRHFWgt
  664. // SIG // b4+DyPOm7KP+ndbslG7AKWMZxFA3o9pwIT+fNZuFPbOe
  665. // SIG // kmjaI5+MFsfpbiYfsDixyf/C26cQIyAJJPrChiS82p3h
  666. // SIG // Z/1kM03DpA==
  667. // SIG // End signature block
  668.